/*
# js 原始类型
- number
- string
- null
- undefined
- Boolean
- Symbol（es6）
- BigInt（es7）

# 对象类型和原始类型的不同
- 存储位置不同：基本数据类型保存在调用栈中，对象保存在堆中 ，栈只保存对象的堆地址
- 使用方式不同：基本数据类型可以直接使用，对象类型通过存在栈中的引用使用

# 函数的参数是对象会发生什么？
- 一个函数的参数如果是对象的话，那么在代码执行时，函数的参数传递的是该参数的引用，而不是对象的副本，如果函数内部对对象进行了更改，那么在代码执行后，对应的对象也会被改变
eg:
 function test(person) {
  person.age = 26
  person = {
    name: '老陈',
    age: 20
  }
  return person
}

const p1 = {
  name: '老王',
  age: 21
}
const p2 = test(p1)
console.log(p1);  //{name:'老王',age:26}
console.log(p2);  //{name:'老陈',age:20}


 */

// instanceof
function _instanceof(obj, type) {
  let proto = null
  if (typeof obj === 'object') {
    proto = obj.__proto__
  }
  if (typeof obj === 'function') {
    proto = obj.prototype
  }
  let typeProto = type.prototype
  while (typeProto !== null) {
    if (proto === typeProto) return true
    else {
      proto = proto.__proto__
    }
  }
  return false
}
console.log(_instanceof([], Object));

